using Order.Api.Read.Dto.Order;

namespace Order.Api.Read.Service.MedicalAIService
{
    /// <summary>
    /// 医疗AI服务接口
    /// 定义了医疗AI服务的所有功能方法
    /// 包括处方分析、诊断建议、药品相互作用检查等医疗相关AI功能
    /// </summary>
    public interface IMedicalAIService
    {
        /// <summary>
        /// 测试AI服务连接状态
        /// 用于验证AI服务是否正常运行，通常在服务启动时或定期检查时调用
        /// </summary>
        /// <returns>
        /// true: AI服务连接正常，可以正常使用
        /// false: AI服务连接失败，需要检查服务状态
        /// </returns>
        Task<bool> TestConnectionAsync();

        /// <summary>
        /// 分析处方内容
        /// 对医生开具的处方进行智能分析，提供专业的医疗建议
        /// 包括药品配伍分析、剂量评估、相互作用检查等
        /// </summary>
        /// <param name="prescriptionText">
        /// 处方文本内容，包含药品名称、剂量、用法等信息
        /// </param>
        /// <returns>
        /// AI生成的处方分析报告，包含详细的医疗建议和注意事项
        /// </returns>
        Task<string> AnalyzePrescriptionAsync(string prescriptionText);

        /// <summary>
        /// 生成医疗报告
        /// 根据患者信息和订单数据生成专业的医疗报告
        /// 报告包含患者信息总结、订单分析、医疗建议等
        /// </summary>
        /// <param name="patient">
        /// 患者基本信息，包括姓名、年龄、性别、联系方式等
        /// </param>
        /// <param name="orderData">
        /// 订单相关数据，可以是药品订单、问诊订单等
        /// </param>
        /// <returns>
        /// 生成的医疗报告，格式专业规范，包含完整的医疗建议
        /// </returns>
        Task<string> GenerateMedicalReportAsync(PatientDto patient, object orderData);

        /// <summary>
        /// 智能诊断建议
        /// 根据患者描述的症状和病史提供初步诊断建议
        /// 注意：这只是AI辅助建议，最终诊断需要专业医生确认
        /// </summary>
        /// <param name="symptoms">
        /// 患者症状描述，如"头痛、发热、咳嗽"等
        /// </param>
        /// <param name="patientHistory">
        /// 患者病史信息，包括既往疾病、过敏史等
        /// 可以为null或空字符串
        /// </param>
        /// <returns>
        /// AI生成的诊断建议，包括可能的诊断方向、建议检查项目等
        /// </returns>
        Task<string> GetDiagnosticSuggestionAsync(string symptoms, string patientHistory);

        /// <summary>
        /// 药品相互作用检查
        /// 分析多个药品之间是否存在相互作用
        /// 帮助医生和药师避免药物配伍禁忌
        /// </summary>
        /// <param name="drugList">
        /// 需要检查的药品列表，包含药品名称
        /// </param>
        /// <returns>
        /// 药品相互作用分析结果，包括相互作用评估、严重程度、用药建议等
        /// </returns>
        Task<string> CheckDrugInteractionsAsync(List<string> drugList);

        /// <summary>
        /// 生成患者健康建议
        /// 根据患者信息和订单历史生成个性化的健康建议
        /// 包括生活方式建议、预防保健、定期体检等
        /// </summary>
        /// <param name="patient">
        /// 患者基本信息
        /// </param>
        /// <param name="orderHistory">
        /// 患者的历史订单记录，用于分析患者的健康状况和就医模式
        /// 可以为null或空列表
        /// </param>
        /// <returns>
        /// 个性化的健康建议，基于患者的具体情况定制
        /// </returns>
        Task<string> GenerateHealthAdviceAsync(PatientDto patient, List<object> orderHistory);
    }
}